﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BussinessLayer;
using DataAccessLayer.Entity;
using DataAccessLayer.Adapter;
using System.Security.Cryptography;
namespace QLTSLienThong.Form_he_thong
{
    public partial class ucNguoiDung : UserControl
    {
        public ucNguoiDung()
        {
            InitializeComponent();
        }
        TaiKhoanBussiness taiKhoanBussiness = new TaiKhoanBussiness();
        NhanVienBussiness nvBussiness = new NhanVienBussiness();
        clsNhanVien clsNV;
        clsTaiKhoan clsTaiKhoan;
        object kq;
        //string _MatKhau="";
        bool KiemTraTonTaiMa=true,KiemTraTonTaiTen=true,ktThemTK;
        private void LoadTaiKhoan()
        {
            dtgTaiKhoan.DataSource = taiKhoanBussiness.LoadaiKhoan();
            LoadComboboxNV();
            LoadLentextBox();
            
            KhoaText();
        }
        private void LoadComboboxNV()
        {
            cboTenNV.DataSource = nvBussiness.LoadNV();
            cboTenNV.DisplayMember = "TenNV";
            cboTenNV.ValueMember = "MaNV";
            //cboTenNV.SelectedIndex = 0;
        }
        private void KhoaText()
        {
            txtMaTK.ReadOnly = true;
            txtMatKhau.ReadOnly = true;
            txtTenDangNhap.ReadOnly = true;
            txtNhapLaiMatKhau.ReadOnly = true;
            cboQuyenQuanLy.Enabled = false;
            cboTenNV.Enabled = false;
            cboQuyenQuanLy.SelectedIndex = 0;
            btnXoaNguoiDung.BringToFront();
            btnThemNguoiDung.BringToFront();
        }
        private void MoText()
        {
            txtNhapLaiMatKhau.ReadOnly = false;
            txtMatKhau.ReadOnly = false;
            txtMaTK.ReadOnly = false;
            txtTenDangNhap.ReadOnly = false;
            cboQuyenQuanLy.Enabled = true;
            cboTenNV.Enabled = true;
            btnThemNguoiDung.SendToBack();
            btnXoaNguoiDung.SendToBack();
        }
        private void XoaText()
        {
            txtMaTK.Focus();
            txtMaTK.Clear();
            txtMatKhau.Clear();
            txtNhapLaiMatKhau.Clear();
            txtTenDangNhap.Clear();
            cboQuyenQuanLy.SelectedIndex = -1;
        }
        private void LoadLentextBox()
        {
            txtMaTK.DataBindings.Clear();
            txtMaTK.DataBindings.Add("Text", dtgTaiKhoan.DataSource, "MatK");
            //txtMatKhau.DataBindings.Clear();
            //txtMatKhau.DataBindings.Add("Text",dtgTaiKhoan.DataSource,"MatKhau");
            txtTenDangNhap.DataBindings.Clear();
            txtTenDangNhap.DataBindings.Add("Text", dtgTaiKhoan.DataSource, "TenDangNhap");
            cboQuyenQuanLy.DataBindings.Clear();
            cboQuyenQuanLy.DataBindings.Add("Text", dtgTaiKhoan.DataSource, "Quyen");
            cboTenNV.DataBindings.Clear();
            cboTenNV.DataBindings.Add("Text",dtgTaiKhoan.DataSource,"TenNV");
        }
        private void btnHuyNguoiDung_Click(object sender, EventArgs e)
        {
            LoadTaiKhoan();
        }

        private void btnLuuNguoiDung_Click(object sender, EventArgs e)
        {
            if (KiemTraDL())
            {
                try
                {
                    clsTaiKhoan = new clsTaiKhoan();
                    clsTaiKhoan.MaTK = txtMaTK.Text;
                    clsTaiKhoan.TenDangNhap = txtTenDangNhap.Text;
                    clsTaiKhoan.MatKhau = MaHoaMatKhau(txtMatKhau.Text);
                    clsTaiKhoan.Quyen = cboQuyenQuanLy.Text;
                    clsTaiKhoan.MaNV = cboTenNV.SelectedValue.ToString();
                    taiKhoanBussiness.ThemTaiKhoan(clsTaiKhoan);
                    MessageBox.Show("Thêm thành công!","Thông báo!");
                    LoadTaiKhoan();
                }
                catch (Exception ex)
                {

                    MessageBox.Show("Bạn không thể lưu!\n"+ex.Message);
                }
            }
        }

        private void btnThemNguoiDung_Click(object sender, EventArgs e)
        {
            MoText();
            XoaText();
            ktThemTK = true;
        }

        private void btnXoaNguoiDung_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn muốn xóa mã: " + txtMaTK.Text + "?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                clsTaiKhoan = new clsTaiKhoan();
                clsTaiKhoan.MaTK = txtMaTK.Text.Trim();
                taiKhoanBussiness.XoaTaiKhoan(clsTaiKhoan);
                LoadTaiKhoan();
            }
        }

        private void ucNguoiDung_Load(object sender, EventArgs e)
        {
            LoadTaiKhoan();
            LoadNV();
        }
        private bool KiemTraDL()
        {
            if (txtMaTK.Text.Trim() == string.Empty)
            {
                MessageBox.Show("Bạn chưa nhập mã Tài khoản!","Thông báo");
                txtMaTK.Focus();
                return false;
            }
             else if (txtTenDangNhap.Text.Trim() == string.Empty)
            {
                MessageBox.Show("Bạn chưa nhập tên đăng nhập!!", "Thông báo");
                txtTenDangNhap.Focus();
                return false;

            }
            //if (txtTenDangNhap.Text.Trim().CompareTo(" ")==1)
            //{
            //    MessageBox.Show("Tên đăng nhập không có khoảng trắng!!", "Thông báo");
            //    txtTenDangNhap.Focus();
            //    return false;
            //}
            else if (txtMatKhau.Text.Trim() == string.Empty)
            {
                MessageBox.Show("Bạn chưa nhập mật khẩu!", "Thông báo");
                txtMatKhau.Focus();
                return false;
            }
            
            else if (txtMatKhau.Text.Trim() != txtNhapLaiMatKhau.Text.Trim())
            {
                 MessageBox.Show("Hai mật khẩu không trùng!", "Thông báo");
                 txtNhapLaiMatKhau.Focus();
                 return false;
            }
            else if (cboQuyenQuanLy.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn chưa chọn quyền!", "Thông báo");
                cboQuyenQuanLy.Focus();
                return false;
            }
            if(ktThemTK==false)
            {
                if (txtMaTK.Text.Trim() == dtgTaiKhoan.CurrentRow.Cells["MaTK"].Value.ToString())
                {
                     KiemTraTonTaiMa = false;
                }
                if (txtTenDangNhap.Text.Trim() == dtgTaiKhoan.CurrentRow.Cells["TenDangNhap"].Value.ToString())
                {
                    KiemTraTonTaiTen = false;
                }
            }
            if (KiemTraTonTaiMa == true)
            {
                clsTaiKhoan = new clsTaiKhoan();
                clsTaiKhoan.MaTK = txtMaTK.Text.Trim();
                kq = taiKhoanBussiness.KiemTraMa(clsTaiKhoan);
                if (Convert.ToInt32(kq) > 0)
                {
                    MessageBox.Show("Mã này đã tồn tài!", "Thông báo!");
                    txtMaTK.Focus();
                    return false;
                }
            }
            if (KiemTraTonTaiTen == true)
            {
                clsTaiKhoan = new clsTaiKhoan();
                clsTaiKhoan.TenDangNhap = txtTenDangNhap.Text.Trim();
                kq = taiKhoanBussiness.KiemTraTen(clsTaiKhoan);
                if (Convert.ToInt32(kq) > 0)
                {
                    MessageBox.Show("Tên này đã tồn tài!", "Thông báo!");
                    txtTenDangNhap.Focus();
                    return false;
                }
            }
            return true;
        }
        private String MaHoaMatKhau(String txt)
        {
            String str = "";
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(txt);
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            buffer = md5.ComputeHash(buffer);
            foreach (byte b in buffer)
            {
                str += b.ToString("X2");
            }

            return str;
        }
        bool _KtthemNV;
        private void MaTuTang()
        {
            txtMaNV.Text = nvBussiness.MaTuTang();
            txtMaNV.Enabled = false;
        }
        private void btnThemNV_Click(object sender, EventArgs e)
        {
            _KtthemNV = true;
            MoTextNV();
            MaTuTang();
            XoaTextNV();
        }

        private void btnSuaNV_Click(object sender, EventArgs e)
        {
            _KtthemNV = false;
            MoTextNV();
        }

        private void btnHuyNV_Click(object sender, EventArgs e)
        {
            LoadNV();
        }

        private void btnLuuNV_Click(object sender, EventArgs e)
        {
            if (KiemTraNV())
            {
                if (_KtthemNV)
                {
                    clsNV = new clsNhanVien();
                    clsNV.MaNV = txtMaNV.Text.Trim();
                    clsNV.TenNV = txtTenNV.Text.Trim();
                    clsNV.Active = true;
                    nvBussiness.ThemNV(clsNV);
                    MessageBox.Show("Thêm thành công!", "Thông báo!");
                    LoadNV();
                }
                else
                {
                    clsNV = new clsNhanVien();
                    clsNV.MaNV = txtMaNV.Text.Trim();
                    clsNV.TenNV = txtTenNV.Text.Trim();
                    //clsNV.Active = true;
                    nvBussiness.SuaNV(clsNV);
                    MessageBox.Show("Sửa thành công!", "Thông báo!");
                    LoadNV();
                }
            }
        }
        private void KhoaTextNV()
        {
            txtMaNV.ReadOnly = true;
            txtTenNV.ReadOnly = true;
            btnThemNV.BringToFront();
            btnSuaNV.BringToFront();
        }
        private void MoTextNV()
        {
            txtMaNV.ReadOnly = false;
            txtTenNV.ReadOnly = false;
            btnThemNV.SendToBack();
            btnSuaNV.SendToBack();
        }
        private void XoaTextNV()
        {
            txtTenNV.Clear();
            txtTenNV.Focus();
            //txtMaNV.Clear();
            //txtMaNV.Focus();
        }
        private void btnXoaNV_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn muốn xóa mã nhân viên: " + txtMaNV.Text + "?", "Thông báo!", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                == DialogResult.Yes)
            {
                clsNV = new clsNhanVien();
                clsNV.MaNV = txtMaNV.Text;
                nvBussiness.XoaNV(clsNV);
                LoadNV();
            }
        }
        private void LoadNV()
        {
            dtgNhanVien.DataSource = nvBussiness.LoadNV();
            KhoaTextNV();
            LoadLenControlNV();
        }
        private bool KiemTraNV()
        {
            //if (txtMaNV.Text.Trim() == "")
            //{
            //    MessageBox.Show("Bạn chưa nhập mã nhân viên","Thông báo!");
            //    txtMaNV.Focus();
            //    return false;
            //}
            if (txtTenNV.Text.Trim() == "")
            {
                MessageBox.Show("Bạn chưa nhập tên nhân viên","Thông báo!");
                txtTenNV.Focus();
                return false;
            }
            return true;
        }
        private void LoadLenControlNV()
        {
            txtMaNV.DataBindings.Clear();
            txtMaNV.DataBindings.Add("Text",dtgNhanVien.DataSource,"MaNV");
            txtTenNV.DataBindings.Clear();
            txtTenNV.DataBindings.Add("Text",dtgNhanVien.DataSource,"TenNV");
        }

        private void buttonX1_Click(object sender, EventArgs e)
        {
            LoadComboboxNV();
        }
    }
}
